/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.Promocion;
import Modelo.Proveedor;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author espe
 */
public class ControlPromocion extends Conexion {

    //<editor-fold defaultstate="collapsed" desc="listar">
    public ArrayList<Promocion> listar() throws SQLException {
        ArrayList<Promocion> lista = null;
        String sql = "SELECT * FROM promocion";
        Connection cn = conectar();
        lista = new ArrayList<>();
        PreparedStatement ps = cn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Promocion obj = new Promocion();
            obj.setCodigo(rs.getInt("prom_codigo"));
            obj.setDescripcion(rs.getString("prom_descripcion"));
            obj.setDescuento(rs.getFloat("prom_porcentajedescuento"));
            obj.setFechaFinal(rs.getDate("prom_fechafinal"));
            obj.setFechaInicial(rs.getDate("prom_fechainicial"));
            obj.setFechaRegistro(rs.getDate("prom_fecharegistro"));
            obj.setNombre(rs.getString("prom_nombre"));
            lista.add(obj);
        }
        desconectar(cn);
        System.out.println(lista.toString());
        return lista;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="insertar">
    public void insertar(String nombre, String descripcion,
            Date fechaRegistro, Date fechaInicial, Date fechaFinal, float descuento)
            throws SQLException {

        Connection cn = conectar();

        if (cn.getAutoCommit()) {
            cn.setAutoCommit(false);
        }
        PreparedStatement ps = cn.prepareStatement("INSERT INTO "
                + "promocion("
                + " prom_nombre, prom_descripcion,prom_fechaRegistro,"
                + " prom_fechaInicial,prom_fechaFinal,"
                + " prom_porcentajedescuento)"
                + "VALUES (?,?,?,?,?,?) ");
        ps.setString(1, nombre);
        ps.setString(2, descripcion);
        ps.setDate(3, fechaRegistro);
        ps.setDate(4, fechaInicial);
        ps.setDate(5, fechaFinal);
        ps.setFloat(6, descuento);

        int a = ps.executeUpdate();
        System.out.println("a:" + a);
        if (a == 1) {
            cn.commit();
            System.out.println("Promocion registrada correctamente");
        }

    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="eliminar">
    public void eliminar(Integer cod) throws SQLException {
        Connection cn = conectar();
        ControlProdServ c = new ControlProdServ();
        c.eliminarProdProv(cod);
        eliminarAsosiacion(cod);
        PreparedStatement ps = cn.prepareStatement("Delete from promocion where prom_codigo=?");
        ps.setInt(1, cod);
        int num = ps.executeUpdate();
        if (num != 0) {
            //JOptionPane.showMessageDialog(null, "eliminado");
            System.out.println("Promoción eliminada correctamente");
        }
    }
    //</editor-fold>

    public void eliminarAsosiacion(Integer codProm) {

        Connection cn = null;
        try {
            cn = conectar();
        } catch (SQLException ex) {
            Logger.getLogger(ControlProdServ.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            if (cn.getAutoCommit()) {
                cn.setAutoCommit(false);
            }

            PreparedStatement ps = cn.prepareStatement("UPDATE  producto SET  "
                    + "prom_codigo=? "
                    + "WHERE prom_codigo=?");

            ps.setNull(0, java.sql.Types.INTEGER);

            ps.setInt(2, codProm);

            int a = ps.executeUpdate();

            if (a >= 1) {
                cn.commit();
                System.out.println("Asociaciones de la promoción eliminadas.");
            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "clave ya registrada" + ex.getMessage());
        } catch (Exception ex) {
            //Logger.getLogger(PryJDBC.class.getName()).log(Level.SEVERE, null, ex);
            deshacer(cn);
        }

    }

    public void actualizarProd(String cod, Integer codProm) {

        Connection cn = null;
        try {
            cn = conectar();
        } catch (SQLException ex) {
            Logger.getLogger(ControlProdServ.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            if (cn.getAutoCommit()) {
                cn.setAutoCommit(false);
            }

            PreparedStatement ps = cn.prepareStatement("UPDATE  producto SET  "
                    + "prom_codigo=? "
                    + "WHERE prod_codigo=?");

            if (codProm >= 0) {
                ps.setInt(1, codProm);
            } else {
                ps.setNull(0, java.sql.Types.INTEGER);
            }
            ps.setInt(2, Integer.parseInt(cod));

            int a = ps.executeUpdate();

            if (a >= 1) {
                cn.commit();
                System.out.println("Asociaciones de la promoción actualizadas.");
            }

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "clave ya registrada" + ex.getMessage());
        } catch (Exception ex) {
            //Logger.getLogger(PryJDBC.class.getName()).log(Level.SEVERE, null, ex);
            deshacer(cn);
        }

    }

//    public void eliminar(String empresa) throws SQLException {
//        Connection cn = conectar();
//        PreparedStatement ps = cn.prepareStatement("Delete from proveedor where pro_empresa=?");
//        ps.setString(1, empresa);
//        int num = ps.executeUpdate();
//        if (num != 0) {
//            //JOptionPane.showMessageDialog(null, "eliminado");
//            System.out.println("Eliminando:" + empresa);
//        }
//    }
    public Promocion buscarPromocion(int codigo) throws SQLException {
        Promocion prom = null;
        String sql = "SELECT * FROM promocion WHERE prom_codigo=?";
        Connection cn = conectar();
        PreparedStatement ps = cn.prepareStatement(sql);
        ps.setInt(1, codigo);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Promocion obj = new Promocion();
            obj.setCodigo(rs.getInt("prom_codigo"));
            obj.setDescripcion(rs.getString("prom_descripcion"));
            obj.setDescuento(rs.getFloat("prom_porcentajedescuento"));
            obj.setFechaFinal(rs.getDate("prom_fechafinal"));
            obj.setFechaInicial(rs.getDate("prom_fechainicial"));
            obj.setFechaRegistro(rs.getDate("prom_fecharegistro"));
            obj.setNombre(rs.getString("prom_nombre"));

            prom = obj;
        }
        desconectar(cn);

        //System.out.println(lista.toString());
        return prom;
    }

    public void actualizar(int codigo, String nombre, String descripcion,
            Date fechaRegistro, Date fechaInicial, Date fechaFinal, float descuento) throws SQLException {

        Connection cn = conectar();

        if (cn.getAutoCommit()) {
            cn.setAutoCommit(false);
        }

        PreparedStatement ps = cn.prepareStatement("UPDATE  promocion SET  "
                + " prom_nombre=?, prom_descripcion=?,prom_fecharegistro=?,"
                + " prom_fechainicial=?,prom_fechafinal=?,"
                + " prom_porcentajedescuento=?"
                + "WHERE prom_codigo=?");

        ps.setString(1, nombre);
        ps.setString(2, descripcion);
        ps.setDate(3, fechaRegistro);
        ps.setDate(4, fechaInicial);
        ps.setDate(5, fechaFinal);
        ps.setFloat(6, descuento);
        ps.setInt(7, codigo);

        int a = ps.executeUpdate();

        if (a >= 1) {

            System.out.println("Promoción Actualizada Correctamente");
            cn.commit();
        }

    }
}
